#include"../include/vector.h"
// 释放 Vector 占用的内存  
void v_clear(void *self) {  
    Vector *vec = (Vector *)self;
    for (size_t i = 0; i < vec->o_size; i++) {  
        free(vec->data[i]); // 释放存储的元素  
    }  
    free(vec->data);  
    free(vec);  
}

// 添加一个新元素到 Vector  
void push_back(void *self, void *element) {  
    Vector *vec = (Vector *)self;
    // 如果当前大小已达到容量，扩展容量  
    if (vec->o_size >= vec->capacity) {  
        vec->capacity *= 2;  // 扩展容量  
        vec->data = realloc(vec->data, vec->capacity * sizeof(void *));  
    }  
    vec->data[vec->o_size++] = element; // 添加元素并更新大小  
} 

// 获取 Vector 中的元素  
void* get(void *self, size_t index) { 
    Vector *vec = (Vector *)self; 
    return (index < vec->o_size) ? vec->data[index] : NULL; // 如果索引越界，返回 NULL  
}

// 设置 Vector 中指定索引位置的元素  
void v_set(void *self, size_t index, void *element) {  
    Vector *vec = (Vector *)self;  
    if (index < vec->o_size) {  
        free(vec->data[index]); // 先释放已有元素的内存  
        vec->data[index] = element; // 设置新元素  
    }  
} 

// 获取 Vector 当前大小  
size_t size(void *self) {  
    Vector *vec = (Vector *)self;
    return vec->o_size;  
} 

// 创建一个新的 Vector  
Vector* vector() {  
    Vector *vec = malloc(sizeof(Vector));  
    vec->o_size = 0;  
    vec->capacity = 1024;  
    vec->data = malloc(1024 * sizeof(void *));  
    vec->clear=v_clear;
    vec->push_back=push_back;
    vec->get=get;
    vec->size=size;
    vec->set = v_set; // 设置 set 函数指针  
    return vec;  
}     